﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sinacor.Infra.UI.Common;
using Sinacor.UI.Bovespa.Clientes.Communication.Bovespa.Cliente.TipoConta;
using Sinacor.Infra.UI.Security.Services;

namespace Sinacor.UI.Bovespa.Clientes.Communication
{
    /// <summary>
    /// Communication de Tipo Conta
    /// </summary>
    public class TipoConta : BaseCommunication
    {
        #region Construtor
        public TipoConta(SessionInformation session)
            : base(session)
        {
        }
        #endregion

        #region AlterarTipoConta
        /// <summary>
        /// Alterar Tipo de Conta
        /// </summary>
        /// <param name="request">Model Tipo de Conta</param>
        public void AlterarTipoConta(Model.TipoConta request) 
        {
            ITipoConta servico = null;

            try
            {
                using (ServiceInstance<ITipoConta> serviceManager = new ServiceInstance<ITipoConta>())
                {
                    servico = serviceManager.TryGetInstance(this.Session);
                    Translator.ModelToDataContract.TipoConta translatorRequest = new Translator.ModelToDataContract.TipoConta();
                    servico.AlterarTipoConta(translatorRequest.ToTipoConta(request));
                }
            }

            catch (Exception ex)
            {
                base.HandleFault(ex); 
            }
            
        }
        #endregion

        #region ConsultarTiposConta

        /// <summary>
        /// Consultar os Tipos de Contas
        /// </summary>
        /// <param name="request">Filtro de Tipo de Conta</param>
        /// <returns>Lista de Tipos de Conta</returns>
        public ModelCollection<Model.TipoConta> ConsultarTiposConta(Model.Parameter.FiltroTipoConta request) 
        {
            ITipoConta servico = null;
            ModelCollection<Model.TipoConta> retorno = null;

            try
            {
                using (ServiceInstance<ITipoConta> serviceManager = new ServiceInstance<ITipoConta>())
                {
                    servico = serviceManager.TryGetInstance(this.Session);
                    Translator.ModelToDataContract.TipoConta translatorRequest = new Translator.ModelToDataContract.TipoConta();
                    Translator.DataContractToModel.TipoConta translatorResponse = new Translator.DataContractToModel.TipoConta();
                    retorno = translatorResponse.ToTipoContaResponse(servico.ConsultarTiposConta(translatorRequest.ToFiltroTipoConta(request)));
                }
            }

            catch (Exception ex)
            {
                base.HandleFault(ex);
            }
            return retorno;
        }

        #endregion

        #region ExcluirTiposConta
        /// <summary>
        /// Excluir os Tipos de Conta
        /// </summary>
        /// <param name="request"></param>
        public void ExcluirTiposConta(ModelCollection<Model.Parameter.FiltroCodigoCliente> request) 
        {
            ITipoConta servico = null;

            try
            {
                using (ServiceInstance<ITipoConta> serviceManager = new ServiceInstance<ITipoConta>())
                {
                    servico = serviceManager.TryGetInstance(this.Session);
                    Translator.ModelToDataContract.TipoConta translatorRequest = new Translator.ModelToDataContract.TipoConta();
                    servico.ExcluirTiposConta(translatorRequest.ToFiltroCodigoCliente(request));
                }
            }

            catch (Exception ex)
            {
                base.HandleFault(ex);
            }
        }
        #endregion

        #region IncluirTipoConta
        /// <summary>
        /// Inclui os Tipos de Conta
        /// </summary>
        /// <param name="request">Model de Tipos de Conta</param>
        public void IncluirTipoConta(Model.TipoConta request) 
        {
            ITipoConta servico = null;

            try
            {
                using (ServiceInstance<ITipoConta> serviceManager = new ServiceInstance<ITipoConta>())
                {
                    servico = serviceManager.TryGetInstance(this.Session);
                    Translator.ModelToDataContract.TipoConta translatorRequest = new Translator.ModelToDataContract.TipoConta();
                    servico.IncluirTipoConta(translatorRequest.ToTipoConta(request));
                }
            }

            catch (Exception ex)
            {
                base.HandleFault(ex);
            }
        }
        #endregion
    }
}
